/**
 * 将日期转化为指定的格式
 * @param date 日期对象
 * @param formatStr 格式化的匹配字符串
 * @returns 格式化后的日期字符串
 *
 * @example
 * // 注意，匹配位数缺少时
 * // 例如： 当前2023年，若YYY进行匹配，返回：023
 * const res = dateFormat(new Date(), "YYYYMMDD");
 * console.log(res);// 20231031
 *
 */
export default function dateFormat(
  date: Date,
  formatStr = "YYYY/MM/DD hh:mm:ss"
) {
  const dateObj = {
    "Y+": date.getFullYear(),
    "M+": date.getMonth() + 1,
    "D+": date.getDate(),
    "h+": date.getHours(),
    "m+": date.getMinutes(),
    "s+": date.getSeconds(),
  };
  let res = formatStr;
  for (let key in dateObj) {
    const reg = new RegExp(`(${key})`);
    const matches = reg.exec(res);
    if (matches === null) continue;
    const matchStr = matches[1];
    if (!matchStr) continue;
    const dateNum = dateObj[key as keyof typeof dateObj] as number;
    res = res.replace(
      matchStr,
      dateNum.toString().padStart(matchStr.length, "0").slice(-matchStr.length)
    );
  }
  return res;
}
